home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / texte / 7up_pd / config.c < prev    next >
C/C++ Source or Header  |  1998-10-29  |  37KB  |  1,163 lines

  1. /* Programmkonfiguration laden und speichern */
  2. /*****************************************************************************
  3. *
  4. *                                              7UP
  5. *                                        Modul: CONFIG.C
  6. *                                     (c) by TheoSoft '90
  7. *
  8. *****************************************************************************/
  9. #include <portab.h>
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13. #include <aes.h>
  14.  
  15. #include "alert.h"
  16.  
  17. #include "7UP.H"
  18. #include "forms.h"
  19. #include "windows.h"
  20. #include "version.h"
  21.  
  22. #define MAXINT 0x7FFF
  23. #define CRLF    1
  24. #define LF      2
  25. #define CR      3
  26. #define EXOB_TYPE(x) (x>>8)
  27. #define TABBAR 0xFF
  28.  
  29. char *split_fname(char *name);
  30. long *get_cookie(long cookie);
  31. static char *find_7upinf(char *pathname, char *ext, int mode);
  32. char *search_env(char *pathname, char *filename, int mode);
  33. char *change_ext(char *name, char *ext);
  34. char *change_name(char *name, char *newname);
  35. char *change_linealname(char *name, char *newname);
  36.  
  37. static char pathname[PATH_MAX];
  38.  
  39. static WINDOW _dummy[]=
  40. {
  41.     -1,0,0,0,0,0,0,0,0,0L,0L,0,0,0,0,0,0,0L,0L,0L,0L,8,16,0,0,NULL,0L,10,1,3,0L,0L,0L,0L,0L,0L,
  42.     -1,0,0,0,0,0,0,0,0,0L,0L,0,0,0,0,0,0,0L,0L,0L,0L,8,16,0,0,NULL,0L,10,1,3,0L,0L,0L,0L,0L,0L,
  43.     -1,0,0,0,0,0,0,0,0,0L,0L,0,0,0,0,0,0,0L,0L,0L,0L,8,16,0,0,NULL,0L,10,1,3,0L,0L,0L,0L,0L,0L,
  44.     -1,0,0,0,0,0,0,0,0,0L,0L,0,0,0,0,0,0,0L,0L,0L,0L,8,16,0,0,NULL,0L,10,1,3,0L,0L,0L,0L,0L,0L,
  45.     -1,0,0,0,0,0,0,0,0,0L,0L,0,0,0,0,0,0,0L,0L,0L,0L,8,16,0,0,NULL,0L,10,1,3,0L,0L,0L,0L,0L,0L,
  46.     -1,0,0,0,0,0,0,0,0,0L,0L,0,0,0,0,0,0,0L,0L,0L,0L,8,16,0,0,NULL,0L,10,1,3,0L,0L,0L,0L,0L,0L,
  47.     -1,0,0,0,0,0,0,0,0,0L,0L,0,0,0,0,0,0,0L,0L,0L,0L,8,16,0,0,NULL,0L,10,1,3,0L,0L,0L,0L,0L,0L,
  48.     -1,0,0,0,0,0,0,0,0,0L,0L,0,0,0,0,0,0,0L,0L,0L,0L,8,16,0,0,NULL,0L,10,1,3,0L,0L,0L,0L,0L,0L
  49. };                      /* | | */
  50.  
  51. typedef struct
  52. {
  53.     int x,y;
  54. }ICNCOORDS;
  55.  
  56. extern int userhandle,clipbrd,act_dev,act_dist,act_paper,norm_point,threedee;
  57. extern WINDOW _wind[];
  58. extern ICNCOORDS iconcoords[11];
  59. extern int zl,bl,or,kz,fz,ur,lr,zz;
  60. extern int exitcode;
  61. extern OBJECT *config,*fkeymenu,*findmenu,
  62.                   *shellmenu,*pinstall,*layout,
  63.                   *divmenu,*desktop,*sortmenu,
  64.                   *grepmenu,*bracemenu,*winmenu,
  65.                   *nummenu,*menueditor;
  66.  
  67. extern char alertstr[];
  68. extern unsigned long backuptime;
  69. extern int nodesktop,eszet,bcancel,WI_KIND,wret,lineendsign,tabexp,
  70.               xdesk,ydesk,wdesk,hdesk,windials,vastart,
  71.               umlautwandlung,toolbar_zeigen,tabbar,scrollreal;
  72.  
  73. extern int boxh, work_out[];
  74. extern int additional;
  75. extern FONTINFO font[];
  76.  
  77. hndl_diverses(OBJECT *tree, int start)
  78. {
  79.     int exit_obj,desk,area[4];
  80.     int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;
  81.     int hidaddr,lowdaddr,ret,toolbar_change;
  82.     char *cp;
  83.     /*static*/ char fpattern[FILENAME_MAX]="*.ACC";
  84.  
  85.     /* MT 19.11.94 abgelöst durch Pickliste */
  86.     divmenu[DIVNAME].ob_flags |= HIDETREE;
  87.     divmenu[DIVNAME].ob_state &=~SELECTED;
  88.  
  89.     r=tree[DIVTABEX].ob_state;
  90.     a=tree[DIVWRET ].ob_state;
  91.     b=tree[DIVKONV ].ob_state;
  92.     c=tree[DIVCRLF ].ob_state;
  93.     v=tree[DIVLF    ].ob_state;
  94.     w=tree[DIVCR    ].ob_state;
  95.     m=tree[DIVPAPER].ob_state;
  96.     d=tree[DIVBACK ].ob_state;
  97.     p=tree[DIVBUTIM].ob_state;
  98.     e=tree[DIVINFO ].ob_state;
  99.     f=tree[DIVSCROLL].ob_state;
  100.     g=tree[DIVSTOOL].ob_state;
  101.     h=tree[DIVDESK ].ob_state;
  102.     i=tree[DIVZENT ].ob_state;
  103.     j=tree[DIVFREE ].ob_state;
  104.     k=tree[DIVMAUS ].ob_state;
  105.     s=tree[DIVDWIN ].ob_state;
  106.     l=tree[DIVSAVE ].ob_state;
  107.     n=tree[DIVNAME ].ob_state;
  108.     o=tree[DIVBLANK].ob_state;
  109.     q=tree[DIVPATH ].ob_state;
  110.     t=tree[DIVVAST ].ob_state;
  111.     x=tree[DIVUMLAUT].ob_state;
  112.     y=tree[DIVCLIP ].ob_state;
  113.     z=tree[DIVTABBAR].ob_state;
  114.     
  115.     desk=nodesktop;
  116.     sprintf(tree[DIVBACK2].ob_spec.tedinfo->te_ptext,"%02d",
  117.               (int)min(99,(int)(backuptime/60000L)));
  118.  
  119.     if(nodesktop) /* kein Desktop, kein Papierkorb */
  120.         tree[DIVPAPER].ob_state|=DISABLED;
  121.     else
  122.         tree[DIVPAPER].ob_state&=~DISABLED;
  123.  
  124.     form_exopen(tree,0);
  125.     do
  126.     {
  127.         exit_obj=form_exdo(tree,0);
  128.         switch(exit_obj)
  129.         {
  130.             case DIVHELP:
  131.                 form_alert(1,Aconfig[0]);
  132.                 objc_change(tree,exit_obj,0,tree->ob_x,tree->ob_y,tree->ob_width,tree->ob_height,tree[exit_obj].ob_state&~SELECTED,TRUE);
  133.                 break;
  134.             case DIVHDA:
  135. #if GEMDOS
  136.                 strcpy(alertstr,"@:\\");
  137.                   alertstr[0]=(char)(getbootdev()+'A');
  138. #else
  139.                 strcpy(alertstr,"C:\\GEMAPPS\\GEMSYS\\");
  140. #endif
  141.                   strcat(alertstr,fpattern);
  142. /* 29.5.94 */
  143.                 if( ! (strrchr(alertstr,'\\') || strrchr(alertstr,'/')))
  144.                     *alertstr=0;
  145.  
  146.                 if(getfilename(alertstr,fpattern,"@",fselmsg[1]))
  147.                 {
  148.                     if((cp=strrchr(alertstr,'.'))!=NULL)
  149.                         *(cp+1)=0;
  150.                     alertstr[strlen(alertstr)-1]=0;
  151. /*
  152.                     form_write(tree,DIVHDA,(char *)split_fname(alertstr),TRUE);
  153. */
  154.                     strcpy((char *)(tree[DIVHDA].ob_spec.index/*+16L*/),(char *)split_fname(alertstr));
  155.                 }
  156.                 tree[exit_obj].ob_state&=~SELECTED;
  157.                 if(!windials)
  158.                     objc_update(tree,ROOT,MAX_DEPTH);
  159.                 else
  160.                     objc_update(tree,exit_obj,0);
  161.                 break;
  162.         }
  163.     }
  164.     while(exit_obj!=DIVOK && exit_obj!=DIVABBR);
  165.     form_exclose(tree,exit_obj,0);
  166.     if(exit_obj==DIVABBR)
  167.     {
  168.         tree[DIVTABEX].ob_state=r;
  169.         tree[DIVWRET ].ob_state=a;
  170.         tree[DIVKONV ].ob_state=b;
  171.         tree[DIVCRLF ].ob_state=c;
  172.         tree[DIVLF    ].ob_state=v;
  173.         tree[DIVCR    ].ob_state=w;
  174.         tree[DIVPAPER].ob_state=m;
  175.         tree[DIVBACK ].ob_state=d;
  176.         tree[DIVBUTIM].ob_state=p;
  177.         tree[DIVINFO ].ob_state=e;
  178.         tree[DIVSCROLL].ob_state=f;
  179.         tree[DIVSTOOL].ob_state=g;
  180.         tree[DIVDESK ].ob_state=h;
  181.         tree[DIVZENT ].ob_state=i;
  182.         tree[DIVFREE ].ob_state=j;
  183.         tree[DIVMAUS ].ob_state=k;
  184.         tree[DIVDWIN ].ob_state=s;
  185.         tree[DIVSAVE ].ob_state=l;
  186.         tree[DIVNAME ].ob_state=n;
  187.         tree[DIVBLANK].ob_state=o;
  188.         tree[DIVPATH ].ob_state=q;
  189.         tree[DIVVAST ].ob_state=t;
  190.         tree[DIVUMLAUT].ob_state=x;
  191.         tree[DIVCLIP ].ob_state=y;
  192.        tree[DIVTABBAR].ob_state=z;
  193.         return;
  194.     }
  195.     if(tree[DIVBUTIM].ob_state & SELECTED)
  196.         backuptime=60000L*atol(form_read(tree,DIVBACK2,alertstr));
  197.     else
  198.         backuptime=0xFFFFFFFF;
  199.     if(backuptime==0L)
  200.     {
  201.         form_alert(1,Aconfig[1]);
  202.         backuptime=0xFFFFFFFF;
  203.     }
  204.  
  205.     if(tree[DIVTABEX].ob_state & SELECTED)
  206.         tabexp=TRUE;
  207.     else
  208.         tabexp=FALSE;
  209.  
  210.     if(tree[DIVKONV].ob_state & SELECTED)
  211.         eszet=TRUE;
  212.     else
  213.         eszet=FALSE;
  214.  
  215.     if(tree[DIVBLANK].ob_state & SELECTED)
  216.         bcancel=TRUE;
  217.     else
  218.         bcancel=FALSE;
  219.  
  220.     if(divmenu[DIVCRLF].ob_state & SELECTED)
  221.         lineendsign=CRLF;
  222.     if(divmenu[DIVLF].ob_state & SELECTED)
  223.         lineendsign=LF;
  224.     if(divmenu[DIVCR].ob_state & SELECTED)
  225.         lineendsign=CR;
  226.  
  227.     if(divmenu[DIVWRET].ob_state & SELECTED)
  228.         wret=TRUE;
  229.     else
  230.         wret=FALSE;
  231.  
  232.     if(divmenu[DIVDWIN].ob_state & SELECTED)
  233.         windials=TRUE;
  234.     else
  235.         windials=FALSE;
  236.  
  237.     if(divmenu[DIVVAST].ob_state & SELECTED)
  238.         vastart=TRUE;
  239.     else
  240.         vastart=FALSE;
  241.  
  242.     if(tree[DIVINFO].ob_state & SELECTED)
  243.         WI_KIND|=INFO;
  244.     else
  245.         WI_KIND&=~INFO;
  246.     for(a=1; a<MAXWINDOWS; a++)
  247.         if(_wind[a].w_state & CREATED)
  248.             Wattrchg(&_wind[a],WI_KIND);
  249.     for(a=1; a<MAXWINDOWS; a++)
  250.         if(_wind[a].w_state & ONTOP)
  251.             Wtop(&_wind[a]);
  252.  
  253.     if(tree[DIVCLIP].ob_state & SELECTED)
  254.         clipbrd=TRUE;
  255.     else
  256.         clipbrd=FALSE;
  257.  
  258.     if(tree[DIVUMLAUT].ob_state & SELECTED)
  259.         umlautwandlung=TRUE;
  260.     else
  261.         umlautwandlung=FALSE;
  262.     
  263.     if(tree[DIVSTOOL].ob_state & SELECTED)
  264.         toolbar_zeigen=TRUE;
  265.     else
  266.         toolbar_zeigen=FALSE;
  267.  
  268.     tabbar_inst(Wgettop(),tree[DIVTABBAR].ob_state & SELECTED);
  269.     
  270.     if(tree[DIVTABBAR].ob_state & SELECTED)
  271.         tabbar=TRUE;
  272.     else
  273.         tabbar=FALSE;
  274.  
  275.     if(tree[DIVSCROLL].ob_state & SELECTED)
  276.         scrollreal=TRUE;
  277.     else
  278.         scrollreal=FALSE;
  279.  
  280.     if(tree[DIVPAPER].ob_state!=m) /* nur wenn geändert, wg. Flackern */
  281.         inst_trashcan_icon(desktop,DESKICN8,DESKICND,FALSE);
  282.  
  283.     if(tree[DIVDESK].ob_state & SELECTED)
  284.         nodesktop=FALSE;
  285.     else
  286.         nodesktop=TRUE;
  287.     if(desk!=nodesktop)
  288.         if(nodesktop)
  289.         {
  290.             winmenu[WINOPALL-1].ob_height=((WINDAT7-WINOPALL+1)*boxh);
  291.             for(i=WINDAT1-1; i<=WINDAT7; i++)
  292.                 winmenu[i].ob_flags&=~HIDETREE;
  293.  
  294.             for(i=WINDAT7;i>=WINDAT1;i--)
  295.                 if(winmenu[i].ob_state&DISABLED)
  296.                 {
  297.                     winmenu[i].ob_flags|=HIDETREE;
  298.                     winmenu[WINOPALL-1].ob_height-=boxh;
  299.                 }
  300.                 else
  301.                     break;
  302.             if(winmenu[WINOPALL-1].ob_height==(WINDAT1-WINOPALL)*boxh)
  303.             {
  304.                 winmenu[WINDAT1-1].ob_flags|=HIDETREE;
  305.                 winmenu[WINOPALL-1].ob_height-=boxh;
  306.             }
  307.             wind_set(0,WF_NEWDESK,NULL,0,0);
  308. #if GEMDOS
  309.             if(get_cookie('MiNT') && (_GemParBlk.global[1] != 1))
  310.             {
  311.                 form_dial(FMD_FINISH,0,0,0,0,xdesk,ydesk,wdesk,hdesk);
  312.             }
  313.             else
  314. #endif
  315.             {
  316.                 wind_update(BEG_UPDATE);
  317.                 _wind_get(0, WF_FIRSTXYWH, &area[0], &area[1], &area[2], &area[3]);
  318.                 while( area[2] && area[3] )
  319.                 {
  320.                     form_dial(FMD_FINISH,0,0,0,0,area[0],area[1],area[2],area[3]);
  321.                     _wind_get(0, WF_NEXTXYWH, &area[0], &area[1], &area[2], &area[3]);
  322.                 }
  323.                 wind_update(END_UPDATE);
  324.             }
  325.         }
  326.         else
  327.         {
  328.             winmenu[WINOPALL-1].ob_height=((WINFULL-WINOPALL+1)*boxh);
  329.             for(i=WINDAT1-1; i<=WINDAT7; i++)
  330.                   winmenu[i].ob_flags|=HIDETREE;
  331.  
  332.             wind_set(0,WF_NEWDESK,desktop,0,0);
  333.             inst_trashcan_icon(desktop,DESKICN8,DESKICND,FALSE);
  334.             wind_update(BEG_UPDATE);
  335.             _wind_get(0, WF_FIRSTXYWH, &area[0], &area[1], &area[2], &area[3]);
  336.             while( area[2] && area[3] )
  337.             {
  338.                 objc_draw(desktop,ROOT,MAX_DEPTH,area[0],area[1],area[2],area[3]);
  339.                 _wind_get(0, WF_NEXTXYWH, &area[0], &area[1], &area[2], &area[3]);
  340.             }
  341.             wind_update(END_UPDATE);
  342.         }
  343. }
  344.  
  345. int _read_lin(WINDOW *wp, char *name) /* Zeilenlineal lesen */
  346. {
  347.     FILE *fp;
  348.     unsigned int state;
  349.     int id,size;
  350.     OBJECT *ob;
  351.     int obj;
  352.  
  353. #if MSDOS
  354.     void far *l;
  355.     long msize;
  356. #endif
  357.  
  358.     if(fp=fopen(name,"rb"))
  359.     {
  360.         fread(alertstr,VERSIONSTRLEN,1,fp);
  361.         if(!strcmp(VERSIONNAME,alertstr))
  362.         {
  363.             fread(&state,sizeof(int),1,fp);
  364.             wp->w_state&=~(BLOCKSATZ+INSERT+INDENT+PROPFONT+COLUMN); /* alles löschen */
  365.             wp->w_state|=(state&(BLOCKSATZ+INSERT+INDENT+PROPFONT+COLUMN)); /* neu */
  366.             fread(&wp->umbruch,sizeof(int),1,fp);
  367.             fread(&wp->tab,sizeof(int),1,fp);
  368.             fread(&id,sizeof(int),1,fp);
  369.             fread(&size,sizeof(int),1,fp);
  370.             if(id==1)         /* wenn Standardfont */
  371.                 Wnewfont(wp,1,size); /* letzte Fontgröβe */
  372.             else                          /* sonst Fonts laden */
  373.             {
  374.                 if(!(wp->w_state & GEMFONTS))
  375.                 {
  376.                     graf_mouse(BUSY_BEE,0L);
  377.                     vq_extnd(wp->vdihandle,0,work_out);
  378. #if GEMDOS
  379.                     if(vq_gdos())
  380.                     {
  381.                         additional=vst_load_fonts(wp->vdihandle,0)+work_out[10];
  382.                         wp->w_state|=GEMFONTS;
  383.                     }
  384.                     else
  385.                         additional=work_out[10]; /* Nur 6x6 system font */
  386. #else
  387.                     msize=farcoreleft()-64*1024L;
  388.                     if(msize>0 && (l=farmalloc(msize))!=NULL)     /*64*/
  389.                     {
  390.                         additional=vst_ex_load_fonts(wp->vdihandle, 0, 4096, 0)+work_out[10]; /*4096*/
  391.                         wp->w_state|=GEMFONTS;
  392.                         farfree(l);
  393.                     }
  394.                     else
  395.                         additional=work_out[10];
  396. #endif
  397.                     graf_mouse(ARROW,0L);
  398.                 }
  399.                 if(additional==work_out[10])     /* Fehler, kein Fontladen möglich */
  400.                     Wnewfont(wp,1,norm_point);  /* Standartfont bei Fehler */
  401.                 else
  402.                 {
  403.                     if(id==vst_font(wp->vdihandle,id)) /* falls in ASSIGN.SYS etwas geändert wurde */
  404.                         Wnewfont(wp,id,size); /* letzter Font und Gröβe */
  405.                     else
  406.                         Wnewfont(wp,1,norm_point);  /* Standartfont bei Fehler */
  407.                 }
  408.             }
  409.             if(wp->toolbar)
  410.             {
  411.                 obj = 0;
  412.                do 
  413.                {
  414.                     ob    = &wp->toolbar[++obj];
  415.                     if((EXOB_TYPE(ob->ob_type)==TABBAR) ||
  416.                                   (ob->ob_type ==G_USERDEF))
  417.                     {
  418.                         if(ob->ob_type==G_USERDEF)
  419.                             fread((char *)((TEDINFO *)ob->ob_spec.userblk->ub_parm)->te_ptext,STRING_LENGTH+1,1,fp);
  420.                         else
  421.                             fread(ob->ob_spec.tedinfo->te_ptext,STRING_LENGTH+1,1,fp);
  422.                     }
  423.                 } 
  424.                 while (! (ob->ob_flags & LASTOB));
  425.             }
  426.             fclose(fp);
  427.             return(TRUE);
  428.         }
  429.         fclose(fp);
  430.     }
  431.     return(FALSE);
  432. }
  433.  
  434. static void _write_lin(WINDOW *wp, char *name) /* Zeilenlineal schreiben */
  435. {
  436.     FILE *fp;
  437.     unsigned int state;
  438.     OBJECT *ob;
  439.     int obj;
  440.     char *cp;
  441.     
  442.     if(fp=fopen(name,"wb"))
  443.     {
  444.         state=wp->w_state&(BLOCKSATZ+INSERT+INDENT+PROPFONT+COLUMN);
  445.         fwrite(VERSIONNAME,VERSIONSTRLEN,1,fp);
  446.         fwrite(&state,sizeof(int),1,fp);
  447.         fwrite(&wp->umbruch,sizeof(int),1,fp);
  448.         fwrite(&wp->tab,sizeof(int),1,fp);
  449.         fwrite(&wp->fontid,sizeof(int),1,fp);
  450.         fwrite(&wp->fontsize,sizeof(int),1,fp);
  451.  
  452.         if(wp->toolbar)
  453.         {
  454.             obj = 0;
  455.            do 
  456.            {
  457.                 ob    = &wp->toolbar[++obj];
  458.                 if((EXOB_TYPE(ob->ob_type)==TABBAR) ||
  459.                               (ob->ob_type ==G_USERDEF))
  460.                 {
  461.                     if(ob->ob_type==G_USERDEF)
  462.                         cp=(char *)((TEDINFO *)ob->ob_spec.userblk->ub_parm)->te_ptext;
  463.                     else
  464.                         cp=ob->ob_spec.tedinfo->te_ptext;
  465.                     fwrite(cp,STRING_LENGTH+1,1,fp);
  466.                 }
  467.             } 
  468.             while (! (ob->ob_flags & LASTOB));
  469.         }
  470.         fclose(fp);
  471.     }
  472. }
  473.  
  474. void hndl_lineal(WINDOW *wp, int start)
  475. {
  476. /*
  477.     /*static*/ char fpattern[FILENAME_MAX]="LINEAL.*";
  478. */
  479.     /*static*/ char fpattern[FILENAME_MAX]="7up*.LIN";
  480.     char *cp, filename[FILENAME_MAX];
  481.     
  482.     if(wp)
  483.     {
  484.         strcpy(pathname,(char *)Wname(wp));
  485.         change_linealname(pathname,"LINEAL");
  486.         sprintf(alertstr,Aconfig[3],
  487.             split_fname((char *)Wname(wp)),split_fname(pathname));
  488.         switch(form_alert(0,alertstr))
  489.         {
  490.           case 1:
  491.               pathname[0]=0;
  492.               search_env(pathname,fpattern,FALSE); /* READ */
  493. /* 29.5.94 */
  494.               if( ! (strrchr(pathname,'\\') || strrchr(pathname,'/')))
  495.                   *pathname=0;
  496.               if(getfilename(pathname,fpattern,"@",fselmsg[2]))
  497.               {
  498.                   if(!_read_lin(wp,pathname))
  499.                   {
  500.                       sprintf(alertstr,Aconfig[4],
  501.                           split_fname(pathname));
  502.                       form_alert(1,alertstr);
  503.                   }
  504.               }
  505.               break;
  506.           case 2:
  507.               strcpy(filename,(char *)split_fname((char *)Wname(wp)));
  508.               change_linealname(filename,"LINEAL");
  509.               search_env(pathname,filename,TRUE); /* WRITE */
  510.               _write_lin(wp,pathname);
  511.               break;
  512.           case 3:
  513.                 break;
  514.         }
  515.     }
  516. }
  517.  
  518. char *find_7upinf(char *path, char *ext, int mode)
  519. {
  520.     char *cp,filename[FILENAME_MAX];
  521.  
  522.     strcpy(filename,"7UP.");
  523.     strcat(filename,ext);
  524.     return(search_env(path,filename,mode));
  525. }
  526.  
  527. int saveconfig(int windstruct)
  528. {
  529.     FILE *fp;
  530.     register int i;
  531.     char *cp, fpattern[FILENAME_MAX];
  532.     
  533.     if(!windstruct)
  534.     {
  535.        strcpy(fpattern,"*.INF");
  536.         find_7upinf(pathname,"INF",TRUE);
  537.         if((cp=strrchr(pathname,'\\'))!=NULL || (cp=strrchr(pathname,'/'))!=NULL)
  538.             strcpy(&cp[1],fpattern);
  539.         else
  540.             *pathname=0;
  541.         if(getfilename(pathname,fpattern,"@",fselmsg[3]))
  542.             fp=fopen(pathname,"wb");
  543.         else
  544.            return;
  545.     }
  546.     else
  547.         fp=fopen(find_7upinf(pathname,"INF",TRUE),"wb");
  548.     if(fp)
  549.     {
  550.         graf_mouse(BUSY_BEE,NULL);
  551.         fwrite(VERSIONNAME,VERSIONSTRLEN,1,fp);
  552.  
  553. /* 30.9.94 jetzt in Diverses
  554.         fwrite(&clipbrd,sizeof(int),1,fp);                 /* Häkchen im PD-Menü */
  555. */
  556.         fwrite(&iconcoords[0],sizeof(iconcoords),1,fp);  /* Icons */
  557.  
  558.         fwrite(&zl,14*sizeof(int),1,fp);                        /* Drucker */
  559.         fwrite(&WI_KIND,sizeof(int),1,fp);                     /* Fensterdesign */
  560. /*
  561.         fwrite(&exitcode,sizeof(int),1,fp);                    /* Exitcode */
  562. */
  563.         fwrite(&layout[PRNKZL].ob_state,sizeof(int),1,fp);
  564.         fwrite(&layout[PRNKZM].ob_state,sizeof(int),1,fp);
  565.         fwrite(&layout[PRNKZR].ob_state,sizeof(int),1,fp);
  566.         fwrite(&layout[PRNFZL].ob_state,sizeof(int),1,fp);
  567.         fwrite(&layout[PRNFZM].ob_state,sizeof(int),1,fp);
  568.         fwrite(&layout[PRNFZR].ob_state,sizeof(int),1,fp);
  569.         fputs(form_read(layout,PRNKZSTR,pathname),fp);
  570.         fputs("\r\n",fp);
  571.         fputs(form_read(layout,PRNFZSTR,pathname),fp);
  572.         fputs("\r\n",fp);
  573.         fwrite(&pinstall[PRNNUM].ob_state,sizeof(int),1,fp);
  574.         fwrite(&pinstall[PRNCUT].ob_state,sizeof(int),1,fp);
  575.         fwrite(&pinstall[PRNALT].ob_state,sizeof(int),1,fp);
  576.         fwrite(&pinstall[PRNKFBEG].ob_state,sizeof(int),1,fp);
  577.         fwrite(&pinstall[PRNFILE].ob_state,sizeof(int),1,fp);
  578.         fwrite(&pinstall[PRNBACK].ob_state,sizeof(int),1,fp);
  579.         fwrite(&pinstall[PRNDEL].ob_state,sizeof(int),1,fp);
  580.         fwrite(&pinstall[PRNALLP].ob_state,sizeof(int),1,fp);
  581.         fwrite(&pinstall[PRNPAIR].ob_state,sizeof(int),1,fp);
  582.         fwrite(&pinstall[PRNUNPA].ob_state,sizeof(int),1,fp);
  583.         fwrite(&pinstall[PRNFF].ob_state,sizeof(int),1,fp);
  584.         fwrite(&pinstall[PRNPAUSE].ob_state,sizeof(int),1,fp);
  585.         fwrite(&pinstall[PRNNOFORM].ob_state,sizeof(int),1,fp);
  586.  
  587.         fwrite(&act_dev,  sizeof(int),1,fp);
  588.         fwrite(&act_dist, sizeof(int),1,fp);
  589.         fwrite(&act_paper,sizeof(int),1,fp);
  590.  
  591.         fwrite(&bracemenu[CBRACE].ob_state,sizeof(int),1,fp);
  592.         fwrite(&bracemenu[SBRACE].ob_state,sizeof(int),1,fp);
  593.         fwrite(&bracemenu[RBRACE].ob_state,sizeof(int),1,fp);
  594.         fwrite(&bracemenu[PBRACE].ob_state,sizeof(int),1,fp);
  595.         fwrite(&bracemenu[PKOMBRAC].ob_state,sizeof(int),1,fp);
  596.         fwrite(&bracemenu[CKOMBRAC].ob_state,sizeof(int),1,fp);
  597.         fwrite(&bracemenu[FREE1BRACE].ob_state,sizeof(int),1,fp);
  598.         fwrite(&bracemenu[FREE2BRACE].ob_state,sizeof(int),1,fp);
  599.         fwrite(&bracemenu[FREE3BRACE].ob_state,sizeof(int),1,fp);
  600.         fwrite(&bracemenu[FREE4BRACE].ob_state,sizeof(int),1,fp);
  601.         fwrite(&bracemenu[FREE5BRACE].ob_state,sizeof(int),1,fp);
  602.         fputs(form_read(bracemenu,FREE1BEG,pathname),fp);
  603.         fputs("\r\n",fp);
  604.         fputs(form_read(bracemenu,FREE1END,pathname),fp);
  605.         fputs("\r\n",fp);
  606.         fputs(form_read(bracemenu,FREE2BEG,pathname),fp);
  607.         fputs("\r\n",fp);
  608.         fputs(form_read(bracemenu,FREE2END,pathname),fp);
  609.         fputs("\r\n",fp);
  610.         fputs(form_read(bracemenu,FREE3BEG,pathname),fp);
  611.         fputs("\r\n",fp);
  612.         fputs(form_read(bracemenu,FREE3END,pathname),fp);
  613.         fputs("\r\n",fp);
  614.         fputs(form_read(bracemenu,FREE4BEG,pathname),fp);
  615.         fputs("\r\n",fp);
  616.         fputs(form_read(bracemenu,FREE4END,pathname),fp);
  617.         fputs("\r\n",fp);
  618.         fputs(form_read(bracemenu,FREE5BEG,pathname),fp);
  619.         fputs("\r\n",fp);
  620.         fputs(form_read(bracemenu,FREE5END,pathname),fp);
  621.         fputs("\r\n",fp);
  622.  
  623.         if(windstruct)
  624.             fwrite(&_wind[1],(MAXWINDOWS-1)*sizeof(WINDOW),1,fp); /* Fenster */
  625.         else
  626.         {
  627.             for(i=1; i<MAXWINDOWS; i++)
  628.             {
  629.                 _dummy[i].xwork    =_wind[i].xwork;
  630.                 _dummy[i].ywork    =_wind[i].ywork;
  631.                 _dummy[i].wwork    =_wind[i].wwork;
  632.                 _dummy[i].hwork    =_wind[i].hwork;
  633.                 _dummy[i].w_state =(_wind[i].w_state&(BLOCKSATZ+INSERT+INDENT+PROPFONT+COLUMN));
  634.                 _dummy[i].umbruch =_wind[i].umbruch;
  635.                 _dummy[i].wscroll =_wind[i].wscroll;
  636.                 _dummy[i].hscroll =_wind[i].hscroll;
  637.                 _dummy[i].fontid  =_wind[i].fontid;
  638.                 _dummy[i].fontsize=_wind[i].fontsize;
  639.                 _dummy[i].tab      =_wind[i].tab;
  640.             }
  641.             fwrite(&_dummy[1],(MAXWINDOWS-1)*sizeof(WINDOW),1,fp); /* Fenster */
  642.         }
  643. /*
  644.         fwrite(savename,sizeof(savename),1,fp);                /* Dateinamen */
  645. */
  646.         /* Suchen / Ersetzen */
  647.         fwrite(&findmenu[FINDNORM].ob_state,sizeof(int),1,fp);
  648.         fwrite(&findmenu[FINDGREP].ob_state,sizeof(int),1,fp);
  649.         fwrite(&findmenu[FINDMAT].ob_state,sizeof(int),1,fp);
  650.         fwrite(&findmenu[FINDSUCH].ob_state,sizeof(int),1,fp);
  651.         fwrite(&findmenu[FINDERS].ob_state,sizeof(int),1,fp);
  652.         fwrite(&findmenu[FINDALLQ].ob_state,sizeof(char),1,fp);
  653.         fwrite(&findmenu[FINDSINQ].ob_state,sizeof(char),1,fp);
  654.         fwrite(&findmenu[FINDBLK].ob_state,sizeof(int),1,fp);
  655.         fwrite(&findmenu[FINDANF].ob_state,sizeof(int),1,fp);
  656.         fwrite(&findmenu[FINDIGNO].ob_state,sizeof(int),1,fp);
  657.         fwrite(&findmenu[FINDWORD].ob_state,sizeof(int),1,fp);
  658.         fwrite(&findmenu[FINDASK].ob_state,sizeof(int),1,fp);
  659.         fwrite(&findmenu[FINDALL].ob_state,sizeof(int),1,fp);
  660.         fwrite(&findmenu[FINDFORW].ob_state,sizeof(int),1,fp);
  661.         fwrite(&findmenu[FINDBACK].ob_state,sizeof(int),1,fp);
  662.  
  663.         fwrite(&divmenu[DIVTABEX].ob_state,sizeof(int),1,fp);
  664.         fwrite(&divmenu[DIVWRET ].ob_state,sizeof(int),1,fp);
  665.         fwrite(&divmenu[DIVKONV ].ob_state,sizeof(int),1,fp);
  666.         fwrite(&divmenu[DIVCRLF ].ob_state,sizeof(int),1,fp);
  667.         fwrite(&divmenu[DIVLF    ].ob_state,sizeof(int),1,fp);
  668.         fwrite(&divmenu[DIVCR    ].ob_state,sizeof(int),1,fp);
  669.         fwrite(&divmenu[DIVPAPER].ob_state,sizeof(int),1,fp);
  670.         fwrite(&divmenu[DIVBACK ].ob_state,sizeof(int),1,fp);
  671.         fwrite(&divmenu[DIVBUTIM].ob_state,sizeof(int),1,fp);
  672.         fwrite(&backuptime,sizeof(long),1,fp);
  673.         fwrite(&divmenu[DIVINFO ].ob_state,sizeof(int),1,fp);
  674.  
  675.         fwrite(&divmenu[DIVSTOOL].ob_state,sizeof(int),1,fp);
  676.         fwrite(&divmenu[DIVTABBAR].ob_state,sizeof(int),1,fp);
  677.         fwrite(&divmenu[DIVSCROLL].ob_state,sizeof(int),1,fp);
  678.  
  679.         fwrite(&divmenu[DIVUMLAUT].ob_state,sizeof(int),1,fp);
  680.         fwrite(&divmenu[DIVDESK ].ob_state,sizeof(int),1,fp);
  681.         fwrite(&divmenu[DIVZENT ].ob_state,sizeof(int),1,fp);
  682.         fwrite(&divmenu[DIVFREE ].ob_state,sizeof(int),1,fp);
  683.         fwrite(&divmenu[DIVMAUS ].ob_state,sizeof(int),1,fp);
  684.         fwrite(&divmenu[DIVDWIN ].ob_state,sizeof(int),1,fp);
  685.         fwrite(&divmenu[DIVNAME ].ob_state,sizeof(int),1,fp);
  686.         fwrite(&divmenu[DIVSAVE ].ob_state,sizeof(int),1,fp);
  687.         fwrite(&divmenu[DIVBLANK].ob_state,sizeof(int),1,fp);
  688.         fwrite(&divmenu[DIVPATH ].ob_state,sizeof(int),1,fp);
  689.         fwrite(&divmenu[DIVVAST ].ob_state,sizeof(int),1,fp);
  690.         fwrite(&divmenu[DIVCLIP ].ob_state,sizeof(int),1,fp);
  691.  
  692.         fwrite(&sortmenu[SORTUP].ob_state,sizeof(int),1,fp);
  693.         fwrite(&sortmenu[SORTDN].ob_state,sizeof(int),1,fp);
  694.         fwrite(&sortmenu[SORTIGNO].ob_state,sizeof(int),1,fp);
  695.  
  696.         fputs(form_read(divmenu,DIVBACK2,pathname),fp);
  697.         fputs("\r\n",fp);
  698. /*
  699.         fputs(form_read(divmenu,DIVHDA,pathname),fp);
  700. */
  701.         fputs((char *)(divmenu[DIVHDA].ob_spec.index/*+16L*/),fp);
  702.         fputs("\r\n",fp);
  703.  
  704.         fputs(form_read(findmenu,FINDSTR,pathname),fp);      /* SUCHSTR */
  705.         fputs("\r\n",fp);                  /* ^^^^^^ Suchstring */
  706.         fputs(form_read(findmenu,FINDREPL,pathname),fp);      /* ERSSTR */
  707.         fputs("\r\n",fp);
  708.  
  709.         fwrite(&shellmenu[SHELLGEM].ob_state,sizeof(int),1,fp);/* SHELL */
  710.         fputs(form_read(shellmenu,SHELCOMM,pathname),fp);        /* SHELL */
  711.         fputs("\r\n",fp);
  712.  
  713.         fwrite(&grepmenu[GREPGREP].ob_state,sizeof(int),1,fp);/* GREP */
  714.         fwrite(&grepmenu[GREPALL ].ob_state,sizeof(int),1,fp);/* GREP */
  715.         fwrite(&grepmenu[GREPFOLD].ob_state,sizeof(int),1,fp);/* GREP */
  716.         fwrite(&grepmenu[GREPMARK].ob_state,sizeof(int),1,fp);/* GREP */
  717.         fputs(form_read(grepmenu,GREPPATT,pathname),fp);        /* GREP */
  718.         fputs("\r\n",fp);
  719. /*
  720.         for(i=FKEY1; i<=FKEY10; i++)
  721.         {
  722.             fputs(form_read(fkeymenu,i,pathname),fp);      /* Fkttasten */
  723.             fputs("\r\n",fp);
  724.         }
  725.         for(i=SFKEY1; i<=SFKEY10; i++)
  726.         {
  727.             fputs(form_read(fkeymenu,i,pathname),fp);
  728.             fputs("\r\n",fp);
  729.         }
  730. */
  731.         fwrite(&nummenu[NUMNDT ].ob_state,sizeof(int),1,fp);
  732.         fwrite(&nummenu[NUMNAMI].ob_state,sizeof(int),1,fp);
  733.         fwrite(&nummenu[NUMTSEP].ob_state,sizeof(int),1,fp);
  734.         fwrite(&nummenu[NUMNORM].ob_state,sizeof(int),1,fp);
  735.         fwrite(&nummenu[NUMERM ].ob_state,sizeof(int),1,fp);
  736.         fputs(form_read(nummenu,NUMMWSTN,pathname),fp); /* NUMMENU */
  737.         fputs("\r\n",fp);
  738.         fputs(form_read(nummenu,NUMMWSTE,pathname),fp); /* NUMMENU */
  739.         fputs("\r\n",fp);
  740.         fputs(form_read(nummenu,NUMKOMMA,pathname),fp);    /* NUMMENU */
  741.         fputs("\r\n",fp);
  742.  
  743.         fwrite(&menueditor[MENUTAKTIV].ob_state,sizeof(int),1,fp);
  744.  
  745.         fclose(fp);
  746.         graf_mouse(ARROW,NULL);
  747.     }
  748. }
  749.  
  750. static char *stradj2(char *dest, char *src, int maxlen)
  751. {
  752.     register int len;
  753.     dest[0]=' ';
  754.     if((len=strlen(src))>maxlen)
  755.     {
  756.         strncpy(dest,src,maxlen/2);
  757.         strncpy(&dest[maxlen/2],&src[len-maxlen/2],maxlen/2);
  758.         dest[maxlen/2-1+1]='.';
  759.         dest[maxlen/2+0+1]='.';
  760.         dest[maxlen/2+1+1]='.';
  761.         dest[maxlen]      = 0;
  762.     }
  763.     else
  764.     {
  765.         strcpy(dest,src);
  766.     }
  767.     return(dest);
  768. }
  769.  
  770. int restoreconfig(char *inffile) /* es kann 7UP.INF als Parameter übergeben werden */
  771. {
  772.     FILE *fp;
  773.     register int i;
  774.     char fpattern[FILENAME_MAX];
  775.     
  776.     fp=fopen(inffile?inffile:find_7upinf(pathname,"INF",FALSE),"rb");
  777.     if(!fp)
  778.         fp=fopen("7UP.INF","rb");
  779.     
  780.     if(!fp)
  781.     {
  782.         sprintf(alertstr,Aconfig[8],stradj2(fpattern,pathname,40));
  783.         form_alert(1,alertstr);
  784.         
  785.        pathname[0]=0;
  786.        strcpy(fpattern,"*.INF");
  787.         if(getfilename(pathname,fpattern,"@",fselmsg[4]))
  788.             fp=fopen(pathname,"rb");
  789.     }
  790.     if(fp)
  791.     {
  792.         fread(alertstr,VERSIONSTRLEN,1,fp);
  793.         if(!strcmp(VERSIONNAME,alertstr))
  794.         {
  795. /* 30.9.94 jetzt in Diverses
  796.             fread(&clipbrd,sizeof(int),1,fp);
  797. */
  798.             fread(&iconcoords[0],sizeof(iconcoords),1,fp);
  799.  
  800.             fread(&zl,14*sizeof(int),1,fp);
  801.             fread(&WI_KIND,sizeof(int),1,fp);                    /* Fensterdesign */
  802. /*
  803.             fread(&exitcode,sizeof(int),1,fp);                    /* Exitcode */
  804. */
  805.             fread(&layout[PRNKZL].ob_state,sizeof(int),1,fp);
  806.             fread(&layout[PRNKZM].ob_state,sizeof(int),1,fp);
  807.             fread(&layout[PRNKZR].ob_state,sizeof(int),1,fp);
  808.             fread(&layout[PRNFZL].ob_state,sizeof(int),1,fp);
  809.             fread(&layout[PRNFZM].ob_state,sizeof(int),1,fp);
  810.             fread(&layout[PRNFZR].ob_state,sizeof(int),1,fp);
  811.             fgets(pathname,64,fp);
  812.             pathname[strlen(pathname)-2]=0;
  813.             form_write(layout,PRNKZSTR,pathname,FALSE);
  814.             fgets(pathname,64,fp);
  815.             pathname[strlen(pathname)-2]=0;
  816.             form_write(layout,PRNFZSTR,pathname,FALSE);
  817.             fread(&pinstall[PRNNUM].ob_state,sizeof(int),1,fp);
  818.             fread(&pinstall[PRNCUT].ob_state,sizeof(int),1,fp);
  819.             fread(&pinstall[PRNALT].ob_state,sizeof(int),1,fp);
  820.             fread(&pinstall[PRNKFBEG].ob_state,sizeof(int),1,fp);
  821.             fread(&pinstall[PRNFILE].ob_state,sizeof(int),1,fp);
  822.             fread(&pinstall[PRNBACK].ob_state,sizeof(int),1,fp);
  823.             fread(&pinstall[PRNDEL].ob_state,sizeof(int),1,fp);
  824.             fread(&pinstall[PRNALLP].ob_state,sizeof(int),1,fp);
  825.             fread(&pinstall[PRNPAIR].ob_state,sizeof(int),1,fp);
  826.             fread(&pinstall[PRNUNPA].ob_state,sizeof(int),1,fp);
  827.             fread(&pinstall[PRNFF].ob_state,sizeof(int),1,fp);
  828.             fread(&pinstall[PRNPAUSE].ob_state,sizeof(int),1,fp);
  829.             fread(&pinstall[PRNNOFORM].ob_state,sizeof(int),1,fp);
  830.  
  831.             fread(&act_dev,  sizeof(int),1,fp);
  832.             fread(&act_dist, sizeof(int),1,fp);
  833.             fread(&act_paper,sizeof(int),1,fp);
  834.  
  835.             fread(&bracemenu[CBRACE].ob_state,sizeof(int),1,fp);
  836.             fread(&bracemenu[SBRACE].ob_state,sizeof(int),1,fp);
  837.             fread(&bracemenu[RBRACE].ob_state,sizeof(int),1,fp);
  838.             fread(&bracemenu[PBRACE].ob_state,sizeof(int),1,fp);
  839.             fread(&bracemenu[PKOMBRAC].ob_state,sizeof(int),1,fp);
  840.             fread(&bracemenu[CKOMBRAC].ob_state,sizeof(int),1,fp);
  841.             fread(&bracemenu[FREE1BRACE].ob_state,sizeof(int),1,fp);
  842.             fread(&bracemenu[FREE2BRACE].ob_state,sizeof(int),1,fp);
  843.             fread(&bracemenu[FREE3BRACE].ob_state,sizeof(int),1,fp);
  844.             fread(&bracemenu[FREE4BRACE].ob_state,sizeof(int),1,fp);
  845.             fread(&bracemenu[FREE5BRACE].ob_state,sizeof(int),1,fp);
  846.  
  847.             fgets(pathname,64,fp);
  848.             pathname[strlen(pathname)-2]=0;
  849.             form_write(bracemenu,FREE1BEG,pathname,FALSE);
  850.             fgets(pathname,64,fp);
  851.             pathname[strlen(pathname)-2]=0;
  852.             form_write(bracemenu,FREE1END,pathname,FALSE);
  853.  
  854.             fgets(pathname,64,fp);
  855.             pathname[strlen(pathname)-2]=0;
  856.             form_write(bracemenu,FREE2BEG,pathname,FALSE);
  857.             fgets(pathname,64,fp);
  858.             pathname[strlen(pathname)-2]=0;
  859.             form_write(bracemenu,FREE2END,pathname,FALSE);
  860.  
  861.             fgets(pathname,64,fp);
  862.             pathname[strlen(pathname)-2]=0;
  863.             form_write(bracemenu,FREE3BEG,pathname,FALSE);
  864.             fgets(pathname,64,fp);
  865.             pathname[strlen(pathname)-2]=0;
  866.             form_write(bracemenu,FREE3END,pathname,FALSE);
  867.  
  868.             fgets(pathname,64,fp);
  869.             pathname[strlen(pathname)-2]=0;
  870.             form_write(bracemenu,FREE4BEG,pathname,FALSE);
  871.             fgets(pathname,64,fp);
  872.             pathname[strlen(pathname)-2]=0;
  873.             form_write(bracemenu,FREE4END,pathname,FALSE);
  874.  
  875.             fgets(pathname,64,fp);
  876.             pathname[strlen(pathname)-2]=0;
  877.             form_write(bracemenu,FREE5BEG,pathname,FALSE);
  878.             fgets(pathname,64,fp);
  879.             pathname[strlen(pathname)-2]=0;
  880.             form_write(bracemenu,FREE5END,pathname,FALSE);
  881.  
  882.             fread(&_wind[1],(MAXWINDOWS-1)*sizeof(WINDOW),1,fp);
  883. /*
  884.             fread(savename,sizeof(savename),1,fp);
  885. */
  886.             fread(&findmenu[FINDNORM].ob_state,sizeof(int),1,fp);
  887.             fread(&findmenu[FINDGREP].ob_state,sizeof(int),1,fp);
  888.             fread(&findmenu[FINDMAT].ob_state,sizeof(int),1,fp);
  889.             fread(&findmenu[FINDSUCH].ob_state,sizeof(int),1,fp);
  890.             fread(&findmenu[FINDERS].ob_state,sizeof(int),1,fp);
  891.             fread(&findmenu[FINDALLQ].ob_state,sizeof(char),1,fp);
  892.             fread(&findmenu[FINDSINQ].ob_state,sizeof(char),1,fp);
  893.             fread(&findmenu[FINDBLK].ob_state,sizeof(int),1,fp);
  894.             fread(&findmenu[FINDANF].ob_state,sizeof(int),1,fp);
  895.             fread(&findmenu[FINDIGNO].ob_state,sizeof(int),1,fp);
  896.             fread(&findmenu[FINDWORD].ob_state,sizeof(int),1,fp);
  897.             fread(&findmenu[FINDASK].ob_state,sizeof(int),1,fp);
  898.             fread(&findmenu[FINDALL].ob_state,sizeof(int),1,fp);
  899.             fread(&findmenu[FINDFORW].ob_state,sizeof(int),1,fp);
  900.             fread(&findmenu[FINDBACK].ob_state,sizeof(int),1,fp);
  901.  
  902.             fread(&divmenu[DIVTABEX].ob_state,sizeof(int),1,fp);
  903.             fread(&divmenu[DIVWRET].ob_state,sizeof(int),1,fp);
  904.             fread(&divmenu[DIVKONV].ob_state,sizeof(int),1,fp);
  905.             fread(&divmenu[DIVCRLF ].ob_state,sizeof(int),1,fp);
  906.             fread(&divmenu[DIVLF    ].ob_state,sizeof(int),1,fp);
  907.             fread(&divmenu[DIVCR    ].ob_state,sizeof(int),1,fp);
  908.             fread(&divmenu[DIVPAPER].ob_state,sizeof(int),1,fp);
  909.             fread(&divmenu[DIVBACK].ob_state,sizeof(int),1,fp);
  910.             fread(&divmenu[DIVBUTIM].ob_state,sizeof(int),1,fp);
  911.             fread(&backuptime,sizeof(long),1,fp);
  912.             fread(&divmenu[DIVINFO].ob_state,sizeof(int),1,fp);
  913.  
  914.             fread(&divmenu[DIVSTOOL].ob_state,sizeof(int),1,fp);
  915.             fread(&divmenu[DIVTABBAR].ob_state,sizeof(int),1,fp);
  916.             fread(&divmenu[DIVSCROLL].ob_state,sizeof(int),1,fp);
  917.  
  918.             fread(&divmenu[DIVUMLAUT].ob_state,sizeof(int),1,fp);
  919.             fread(&divmenu[DIVDESK].ob_state,sizeof(int),1,fp);
  920.             fread(&divmenu[DIVZENT].ob_state,sizeof(int),1,fp);
  921.             fread(&divmenu[DIVFREE].ob_state,sizeof(int),1,fp);
  922.             fread(&divmenu[DIVMAUS].ob_state,sizeof(int),1,fp);
  923.             fread(&divmenu[DIVDWIN].ob_state,sizeof(int),1,fp);
  924.             fread(&divmenu[DIVNAME].ob_state,sizeof(int),1,fp);
  925.             fread(&divmenu[DIVSAVE].ob_state,sizeof(int),1,fp);
  926.             fread(&divmenu[DIVBLANK].ob_state,sizeof(int),1,fp);
  927.             fread(&divmenu[DIVPATH].ob_state,sizeof(int),1,fp);
  928.             fread(&divmenu[DIVVAST].ob_state,sizeof(int),1,fp);
  929.             fread(&divmenu[DIVCLIP].ob_state,sizeof(int),1,fp);
  930.  
  931.             fread(&sortmenu[SORTUP].ob_state,sizeof(int),1,fp);
  932.             fread(&sortmenu[SORTDN].ob_state,sizeof(int),1,fp);
  933.             fread(&sortmenu[SORTIGNO].ob_state,sizeof(int),1,fp);
  934.  
  935.             fgets(pathname,64,fp);
  936.             pathname[strlen(pathname)-2]=0;
  937.             form_write(divmenu,DIVBACK2,pathname,FALSE);
  938.  
  939.             fgets(pathname,64,fp);
  940.             pathname[strlen(pathname)-2]=0;
  941. /*
  942.             form_write(divmenu,DIVHDA,pathname,FALSE);
  943. */
  944.            strcpy((char *)(divmenu[DIVHDA].ob_spec.index/*+16L*/),pathname);
  945.             fgets(pathname,64,fp);
  946.             pathname[strlen(pathname)-2]=0;
  947.             form_write(findmenu,FINDSTR,pathname,FALSE);
  948.             fgets(pathname,64,fp);
  949.             pathname[strlen(pathname)-2]=0;
  950.             form_write(findmenu,FINDREPL,pathname,FALSE);
  951.  
  952.             fread(&shellmenu[SHELLGEM].ob_state,sizeof(int),1,fp);/* SHELL */
  953.             fgets(pathname,64,fp);
  954.             pathname[strlen(pathname)-2]=0;
  955.             form_write(shellmenu,SHELCOMM,pathname,FALSE);
  956.  
  957.             fread(&grepmenu[GREPGREP].ob_state,sizeof(int),1,fp);/* GREP */
  958.             fread(&grepmenu[GREPALL ].ob_state,sizeof(int),1,fp);/* GREP */
  959.             fread(&grepmenu[GREPFOLD].ob_state,sizeof(int),1,fp);/* GREP */
  960.             fread(&grepmenu[GREPMARK].ob_state,sizeof(int),1,fp);/* GREP */
  961.             fgets(pathname,64,fp);
  962.             pathname[strlen(pathname)-2]=0;
  963.             form_write(grepmenu,GREPPATT,pathname,FALSE);
  964. /*
  965.             for(i=FKEY1; i<=FKEY10; i++)
  966.             {
  967.                 fgets(pathname,64,fp);
  968.                 pathname[strlen(pathname)-2]=0;
  969.                 form_write(fkeymenu,i,pathname,FALSE);
  970.             }
  971.             for(i=SFKEY1; i<=SFKEY10; i++)
  972.             {
  973.                 fgets(pathname,64,fp);
  974.                 pathname[strlen(pathname)-2]=0;
  975.                 form_write(fkeymenu,i,pathname,FALSE);
  976.             }
  977. */
  978.             fread(&nummenu[NUMNDT].ob_state,sizeof(int),1,fp);
  979.             fread(&nummenu[NUMNAMI].ob_state,sizeof(int),1,fp);
  980.             fread(&nummenu[NUMTSEP].ob_state,sizeof(int),1,fp);
  981.             fread(&nummenu[NUMNORM].ob_state,sizeof(int),1,fp);
  982.             fread(&nummenu[NUMERM ].ob_state,sizeof(int),1,fp);
  983.             fgets(pathname,64,fp);
  984.             pathname[strlen(pathname)-2]=0;
  985.             form_write(nummenu,NUMMWSTN,pathname,FALSE);/* NUMMENU */
  986.             fgets(pathname,64,fp);
  987.             pathname[strlen(pathname)-2]=0;
  988.             form_write(nummenu,NUMMWSTE,pathname,FALSE);/* NUMMENU */
  989.             fgets(pathname,64,fp);
  990.             pathname[strlen(pathname)-2]=0;
  991.             form_write(nummenu,NUMKOMMA,pathname,FALSE);/* NUMMENU */
  992.  
  993.             fread(&menueditor[MENUTAKTIV].ob_state,sizeof(int),1,fp);
  994.  
  995.         }
  996.         fclose(fp);
  997.     }
  998. }
  999.  
  1000. int abs2rel(int abspos, int pixel)
  1001. {
  1002.     long hilf;
  1003.     hilf=(long)abspos*10000/pixel;
  1004.     return((int)hilf);
  1005. }
  1006.  
  1007. int rel2abs(int relpos, int pixel)
  1008. {
  1009.     long hilf;
  1010.     hilf=(long)relpos*pixel/10000;
  1011.     return((int)hilf);
  1012. }
  1013.  
  1014. int saveformat(OBJECT *tree, char *fname)
  1015. {
  1016.     FILE *fp;
  1017.     if((fp=fopen(fname,"wb"))!=NULL)
  1018.     {
  1019.         fwrite(VERSIONNAME,VERSIONSTRLEN,1,fp);
  1020.         fwrite(&zl,8*sizeof(int),1,fp);                      /* Drucker */
  1021.         fwrite(&tree[PRNKZL].ob_state,sizeof(int),1,fp);
  1022.         fwrite(&tree[PRNKZM].ob_state,sizeof(int),1,fp);
  1023.         fwrite(&tree[PRNKZR].ob_state,sizeof(int),1,fp);
  1024.         fwrite(&tree[PRNFZL].ob_state,sizeof(int),1,fp);
  1025.         fwrite(&tree[PRNFZM].ob_state,sizeof(int),1,fp);
  1026.         fwrite(&tree[PRNFZR].ob_state,sizeof(int),1,fp);
  1027.         fputs(form_read(tree,PRNKZSTR,alertstr),fp);
  1028.         fputs("\r\n",fp);
  1029.         fputs(form_read(tree,PRNFZSTR,alertstr),fp);
  1030.         fputs("\r\n",fp);
  1031.         fclose(fp);
  1032.         return(TRUE);
  1033.     }
  1034.     else
  1035.         form_alert(1,Aconfig[5]);
  1036.     return(FALSE);
  1037. }
  1038.  
  1039. int loadformat(OBJECT *tree, char *fname)
  1040. {
  1041.     FILE *fp;
  1042.     if((fp=fopen(fname,"rb"))!=NULL)
  1043.     {
  1044.         fread(alertstr,VERSIONSTRLEN,1,fp);
  1045.         if(!strcmp(VERSIONNAME,alertstr))
  1046.         {
  1047.             fread(&zl,8*sizeof(int),1,fp);
  1048.             sprintf(tree[PRNZL].ob_spec.tedinfo->te_ptext,"%3d",zl);
  1049.             sprintf(tree[PRNBL].ob_spec.tedinfo->te_ptext,"%3d",bl);
  1050.             sprintf(tree[PRNOR].ob_spec.tedinfo->te_ptext,"%02d",or);
  1051.             sprintf(tree[PRNKZ].ob_spec.tedinfo->te_ptext,"%02d",kz);
  1052.             sprintf(tree[PRNFZ].ob_spec.tedinfo->te_ptext,"%02d",fz);
  1053.             sprintf(tree[PRNUR].ob_spec.tedinfo->te_ptext,"%02d",ur);
  1054.             sprintf(tree[PRNLR].ob_spec.tedinfo->te_ptext,"%02d",lr);
  1055.             sprintf(tree[PRNZZ].ob_spec.tedinfo->te_ptext,"%3d",zz);
  1056.             fread(&tree[PRNKZL].ob_state,sizeof(int),1,fp);
  1057.             fread(&tree[PRNKZM].ob_state,sizeof(int),1,fp);
  1058.             fread(&tree[PRNKZR].ob_state,sizeof(int),1,fp);
  1059.             fread(&tree[PRNFZL].ob_state,sizeof(int),1,fp);
  1060.             fread(&tree[PRNFZM].ob_state,sizeof(int),1,fp);
  1061.             fread(&tree[PRNFZR].ob_state,sizeof(int),1,fp);
  1062.             fgets(alertstr,64,fp);
  1063.             alertstr[strlen(alertstr)-2]=0;
  1064.             form_write(tree,PRNKZSTR,alertstr,FALSE);
  1065.             fgets(alertstr,64,fp);
  1066.             alertstr[strlen(alertstr)-2]=0;
  1067.             form_write(tree,PRNFZSTR,alertstr,FALSE);
  1068.             fclose(fp);
  1069.             return(TRUE);
  1070.         }
  1071.         fclose(fp);
  1072.         form_alert(1,Aconfig[6]);
  1073.     }
  1074.     else
  1075.         form_alert(1,Aconfig[7]);
  1076.     return(FALSE);
  1077. }
  1078.  
  1079. void sicons(void)
  1080. {
  1081.     register int i;
  1082.     for(i=DESKICN1;i<=DESKICNA;i++)                  /* koordinaten sichern */
  1083.     {
  1084.         iconcoords[i-DESKICN1].x = abs2rel(desktop[i].ob_x, xdesk+wdesk);
  1085.         iconcoords[i-DESKICN1].y = abs2rel(desktop[i].ob_y, ydesk+hdesk);
  1086.     }
  1087.     if(desktop[DESKICN8].ob_flags&HIDETREE)
  1088.     {
  1089.         iconcoords[i-DESKICN1].x = abs2rel(desktop[DESKICND].ob_x, xdesk+wdesk);
  1090.         iconcoords[i-DESKICN1].y = abs2rel(desktop[DESKICND].ob_y, ydesk+hdesk);
  1091.     }
  1092.     else
  1093.     {
  1094.         iconcoords[i-DESKICN1].x = abs2rel(desktop[DESKICN8].ob_x, xdesk+wdesk);
  1095.         iconcoords[i-DESKICN1].y = abs2rel(desktop[DESKICN8].ob_y, ydesk+hdesk);
  1096.     }
  1097.     if(desktop[DESKICNB].ob_flags&HIDETREE)
  1098.     {
  1099.         iconcoords[i-DESKICN1].x = abs2rel(desktop[DESKICNC].ob_x, xdesk+wdesk);
  1100.         iconcoords[i-DESKICN1].y = abs2rel(desktop[DESKICNC].ob_y, ydesk+hdesk);
  1101.     }
  1102.     else
  1103.     {
  1104.         iconcoords[i-DESKICN1].x = abs2rel(desktop[DESKICNB].ob_x, xdesk+wdesk);
  1105.         iconcoords[i-DESKICN1].y = abs2rel(desktop[DESKICNB].ob_y, ydesk+hdesk);
  1106.     }
  1107. }
  1108. /*
  1109. int readnames(void) /* letzte Dateinamen sichern */
  1110. {
  1111.     FILE *fp;
  1112.     char filename[PATH_MAX];
  1113.  
  1114.     if(divmenu[DIVNAME].ob_state & SELECTED)
  1115.     {
  1116.         if((fp=fopen(find_7upinf(pathname,"NMS",FALSE),"r"))!=NULL)
  1117.         {
  1118.             fgets(filename,PATH_MAX,fp);
  1119.             filename[strlen(filename)-1]=0;
  1120.             if(!strcmp(VERSIONNAME,filename))
  1121.             {
  1122.                 while(fgets(filename,PATH_MAX,fp))
  1123.                 {
  1124.                     filename[strlen(filename)-1]=0;
  1125.                     Wreadtempfile(filename,TRUE);
  1126.                 }
  1127.             }
  1128.             fclose(fp);
  1129.             unlink(pathname);
  1130.             return(TRUE);
  1131.         }
  1132.     }
  1133.     return(FALSE);
  1134. }
  1135.  
  1136. void writenames(void) /* letzte Dateien laden */
  1137. {
  1138.     int i;
  1139.     FILE *fp;
  1140.  
  1141.     if(divmenu[DIVNAME].ob_state & SELECTED)
  1142.     {
  1143.         if((Wcount(CREATED)>0) && ((fp=fopen(find_7upinf(pathname,"NMS",TRUE),"w"))!=NULL))
  1144.         {
  1145.             fputs(VERSIONNAME,fp);
  1146.             fputs("\n",fp);
  1147.             for(i=1; i<MAXWINDOWS; i++)
  1148.             {
  1149.                 if(_wind[i].w_state & CREATED)
  1150.                 {
  1151.                     fputs((char *)Wname(&_wind[i]),fp);
  1152.                     fputs("\n",fp);
  1153.                 }
  1154.                 else
  1155.                     _wind[i].col=_wind[i].row=
  1156.                     _wind[i].wfirst=_wind[i].hfirst=0;
  1157.             }
  1158.             fclose(fp);
  1159.         }
  1160.     }
  1161. }
  1162. */
  1163.